package kt03.rx01

fun main() {
    create {
        "112345656"
    }.map {
        123
    }.map {
        true
    }.map {
        3333.444
    }.consumer {
        println("消费$it")
    }

    create {
        "4444"
    }.map {
        it.length
    }.map {
        "内容长度是$it"
    }.map {
        "【$it】"
    }.consumer {
        println("消费$it")
    }

}

class Helper<T>(private var item: T) {
    //    map 可以链式调用
    fun <R> map(action: (T) -> R): Helper<R> {
//        RxJava变化操作，T变成R
        val newItem: R = action(item)
        return Helper(newItem)
    }

    //    思路：消费，只需要上一个操作符的返回类型就可以了，我不需要返回 ，所以没有R
    fun consumer(action: (T) -> Unit) = action(item)
}

fun <R> create(action: () -> R): Helper<R> {
    val r: R = action()
    return Helper(r)
}